#include <cmath>
#include <iostream>

using namespace std;

bool zhiBaoHan07(int result) {
  string resultStr = to_string(result);

  for (char c : resultStr) {
    if (c != '0' && c != '7') { return false; }
  }

  return true;
}

// Palindrome -> 回文
/*
对于任意一个正整数 n，我们一定能找到一个正整数 m，使得 n * m 的结果只包含数字 0 和 7。
我们管这个只包含 0 和 7 的数字，叫做 n 的 07 倍数。

n = 2, m = 35,   n * m = 70
n = 3, m = 2359, n * m = 7077
n = 4, m = 175,  n * m = 700
...

07倍数不一定是唯一的。
*/
// 返回 n 的第一个 07 倍数。
// 判断 n 的每一个倍数是否包含 07
int result07(int n) {
  /*
    int m = 2;
    n * m
  */

  int m = 2; // 倍数
  int result = n * m;

  while (!zhiBaoHan07(result)) {
    ++m;
    result = n * m;
  }

  return result;
}

/*
int i = 1; // 十进制
把十进制的 i 变成它的二进制形式的字符串
把这个二进制的字符串变回十进制
*/
// 什么情况下才能得到只包含 0 和 7 的数字？
// 1  2   3   4   5   6   7    8
// 1  10  11  100 101 110 111 1000
// 7
// 7  70  77  700 707 770 777 7000

// 1. 找到所有只包含 0 和 7 的数字
// 7 的乘数里只能包含 0 或 1
// 2. 如何能找到所有和 7 相乘



bool isPalindrome07(int n) {
  //...
}

// Palindrome07
// 07 倍数是回文的数字
int main(int argc, char const *argv[])
{
  /* code */
  // 如果要找到 1 - 50 之间所有 07 倍数是回文的数字
  cout << result07(9) << endl;
  return 0;
}
